home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / dev / lang / bcpl4amiga.lha / bcpl / cgtest.bpl < prev    next >
Text File  |  1988-03-30  |  7KB  |  311 lines

  1. GET "LIBHDR"
  2.  
  3. // THIS IS A UNIVERSAL CODE-GENERATOR TEST PROGRAM
  4. // WRITTEN BY M. RICHARDS ORIGINALLY TO TEST THE
  5. // CII 10070 CODE-GENERATOR.
  6.  
  7. GLOBAL $( F:100; G:101; H:102
  8.           TESTNO:103; FAILCOUNT:104
  9.           V:105; TESTCOUNT:106; QUIET:107; T:108  $)
  10.  
  11. STATIC $( A=10; B=11; C=12; W=0  $)
  12.  
  13. MANIFEST $( K0=0; K1=1; K2=2  $)
  14.  
  15. LET T(X, Y) = VALOF
  16.    $( TESTNO := TESTNO + 1
  17.       TESTCOUNT := TESTCOUNT + 1
  18.       IF X=Y & QUIET RESULTIS Y
  19.       WRITEF("%I3 %I5 ", TESTNO, Y)
  20.       TEST X=Y
  21.          THEN WRITES("OK*N")
  22.          ELSE $( WRITEF("FAILED %X8(%N) %X8(%N)*N", X, X, Y, Y)
  23.                  FAILCOUNT := FAILCOUNT + 1  $)
  24.       RESULTIS Y  $)
  25.  
  26.  
  27. LET T1(A,B,C,D,E,F,G) = T(A+B+C+D+E+F, G)
  28.  
  29. LET START(PARM) BE
  30. $(1 LET V1 = VEC 200
  31.     AND V2 = VEC 200
  32.     TESTER(0, 1, 2, V1, V2)
  33. $)1
  34.  
  35. AND TIMEOFDAY() = "Now"
  36.  
  37. AND DATE() = "Today"
  38.  
  39. AND TESTER(X, Y, Z, V1, V2) BE
  40. $(1 WRITEF("*NCGTESTER ENTERED %S %S*N*N",
  41.             TIMEOFDAY(), DATE())
  42.  
  43. //  FIRST INITIALIZE CERTAIN VARIABLES
  44.  
  45.     F, G, H := 100, 101, 102
  46.     TESTNO, TESTCOUNT, FAILCOUNT := 0, 0, 0
  47.     V, W := V1, V2
  48.  
  49.     FOR I = 0 TO 200 DO V!I, W!I := 1000+I, 10000+I
  50.  
  51.  
  52.     QUIET := FALSE
  53. //  QUIET := GETBYTE(PARM,0)>0 & GETBYTE(PARM,1)='Q' -> TRUE, FALSE
  54.  
  55. //  TEST SIMPLE VARIABLES AND EXPRESSIONS
  56.  
  57.     T(A+B+C, 33)
  58.     T(F+G+H, 303)
  59.     T(X+Y+Z, 3)
  60.  
  61.     T(123+321-400, 44)
  62.     T(X=0, TRUE)
  63.     T(Y=0, FALSE)
  64.     T(!(@Y+X), 1)
  65.     T(!(@B+X), 11)
  66.     T(!(@G+X), 101)
  67.  
  68.     X, A, F := 5, 15, 105
  69.     T(X, 5)
  70.     T(A, 15)
  71.     T(F, 105)
  72.  
  73.     V!1, V!2 := 1234, 5678
  74.     T(V!1, 1234)
  75.     T(V!Z, 5678)
  76.  
  77.     T(X*A, 75)
  78.     T(1*X+2*Y+3*Z+F*4,433)
  79.     T(X*A+A*X, 150)
  80.  
  81.     T(100/2, 50)
  82.     T(A/X, 3)
  83.     T(A/-X, -3)
  84.     T((-A)/X, -3)
  85.     T((-A)/(-X), 3)
  86.     T((A+A)/A, 2)
  87.     T((A*X)/(X*A), 1)
  88.     T((A+B)*(X+Y)*123/(6*123), 26)
  89.  
  90.     T(7 REM 2, 1)
  91.     T(F REM 100, 5)
  92.     T(A REM X, 0)
  93.  
  94.     T(-F, -105)
  95.     T(F=105, TRUE)
  96.     T(F NE 105, FALSE)
  97.     T(F<105, FALSE)
  98.     T(F>=105, TRUE)
  99.     T(F>105, FALSE)
  100.     T(F<=105, TRUE)
  101.  
  102.     T(#1775<<3, #17750)
  103.     T(#1775>>3, #177)
  104.     T(#1775<<Z+1, #17750)
  105.     T(#1775>>Z+1, #177)
  106.  
  107.     T(#B1100&#B1010, #B1000)
  108.     T(#B1100 \/ #B1010, #B1110)
  109.     T((#B1100 EQV   #B1010) & #B11111, #B11001)
  110.     T(#B1100 NEQV  #B1010, #B0110)
  111.  
  112.     T(NOT TRUE, FALSE)
  113.     T(NOT FALSE, TRUE)
  114.     T(NOT(1234 EQV -4321), 1234 NEQV -4321)
  115.  
  116.     T(-F, -105)
  117.  
  118.     T(!V, 1000)
  119.     T(V!0, 1000)
  120.     T(V!1, 1234)
  121.     T(V!(!V-998), 5678)
  122.     T(!W, 10000)
  123.     T(W!0, 10000)
  124.     T(0!W, 10000)
  125.     T(1!W, 10001)
  126.     T(W!1, 10001)
  127.     T(!(W+200), 10200)
  128.  
  129.     A := TRUE
  130.     B := FALSE
  131.  
  132.     IF A DO X := 16
  133.     T(X, 16)
  134.     X := 16
  135.  
  136.     IF B DO X := 15
  137.     T(X, 16)
  138.     X := 15
  139.  
  140.     $( LET W = VEC 20
  141.        GOTO L1
  142.     L2: WRITES("GOTO ERROR*N")
  143.         FAILCOUNT := FAILCOUNT+1  $)
  144.  
  145. L1: A := VALOF RESULTIS 11
  146.     T(A, 11)
  147.  
  148.     TESTNO := 100  // TEST SIMULATED STACK ROUTINES
  149.  
  150.     $( LET V1 = VEC 1
  151.        V1!0, V1!1 := -1, -2
  152.        $( LET V2 = VEC 10
  153.           FOR I = 0 TO 10 DO V2!I := -I
  154.           T(V2!5, -5)  $)
  155.        T(V1!1, -2)  $)
  156.  
  157.     X := X + T(X,15, T(F, 105), T(A, 11)) - 15
  158.     T(X, 15)
  159.  
  160.     X := X+1
  161.     T(X, 16)
  162.     X := X-1
  163.     T(X, 15)
  164.     X := X+7
  165.     T(X,22)
  166.     X := X-22
  167.     T(X, 0)
  168.     X := X+15
  169.     T(X, 15)
  170.     X := X + F
  171.     T(X, 120)
  172.     X := 1
  173.  
  174.     TESTNO := 200  // TEST SWITCHON COMMANDS
  175.  
  176. $(SW LET S1, S1F = 0, 0
  177.      AND S2, S2F = 0, 0
  178.  
  179.      FOR I = -200 TO 200 DO
  180.      $( SWITCHON I INTO
  181.          $( DEFAULT: S1 := S1+1000; ENDCASE
  182.             CASE -1000: S1F := S1F + I; ENDCASE
  183.             CASE -200: S1 := S1 + 1
  184.             CASE -190: S1 := S1 + 1
  185.             CASE -180: S1 := S1 + 1
  186.             CASE   -5: S1 := S1 + 1
  187.             CASE    0: S1 := S1 + 1
  188.             CASE -145: S1 := S1 + 1
  189.             CASE    7: S1 := S1 + 1
  190.             CASE    8: S1 := S1 + 1
  191.             CASE  200: S1 := S1 + 1
  192.             CASE  190: S1 := S1 + 1
  193.             CASE  100: S1 := S1 + 1
  194.             CASE   90: S1 := S1 + 1
  195.             CASE  199: S1 := S1 + 1
  196.             CASE   95: S1 := S1 + 1
  197.             CASE   76: S1 := S1 + 1
  198.             CASE   88: S1 := S1 + 1
  199.             CASE   99: S1 := S1 + 1
  200.             CASE  -98: S1 := S1 + 1
  201.             CASE   11: S1 := S1 + 1
  202.             CASE   12: S1 := S1 + 1
  203.             CASE   13: S1 := S1 + 1
  204.             CASE   41: S1 := S1 + 1
  205.             CASE   91: S1 := S1 + 1
  206.             CASE   92: S1 := S1 + 1
  207.             CASE   71: S1 := S1 + 1
  208.             CASE   73: S1 := S1 + 1
  209.             CASE   74: S1 := S1 + 1
  210.             CASE   81: S1 := S1 + 1
  211.             CASE   82: S1 := S1 + 1
  212.             CASE   61: S1 := S1 + 1
  213.             CASE -171: S1 := S1 + 1
  214.             CASE -162: S1 := S1 + 1  $)
  215.  
  216.         SWITCHON I+10000 INTO
  217.          $( DEFAULT: S2 := S2+1000; ENDCASE
  218.             CASE 10020: S2 := S2 + 1
  219.             CASE 10021: S2 := S2 + 1
  220.             CASE 10022: S2 := S2 + 1
  221.             CASE 10023: S2 := S2 + 1
  222.             CASE 10024: S2 := S2 + 1
  223.             CASE 10025: S2 := S2 + 1
  224.             CASE 10026: S2 := S2 + 1
  225.             CASE 10027: S2 := S2 + 1
  226.             CASE 10028: S2 := S2 + 1
  227.             CASE 10029: S2 := S2 + 1
  228.             CASE 10010: S2 := S2 + 1
  229.             CASE 10011: S2 := S2 + 1
  230.             CASE 10012: S2 := S2 + 1
  231.             CASE 10013: S2 := S2 + 1
  232.             CASE 10014: S2 := S2 + 1
  233.             CASE 10015: S2 := S2 + 1  $)
  234.  
  235.      $)
  236.      T(S1F, 0)
  237.      T(S2F, 0)
  238.      T(S1, (401-32)*1000 + 32*(32+1)/2)
  239.      T(S2, (401-16)*1000 + 16*(16+1)/2)
  240. $)SW
  241.  
  242.  
  243.     TESTNO := 250  // TEST FUNCTION CALLING
  244.  
  245.       T1(1,2,3,4,5,6, 21)
  246.       T1(T(1,1), T(2,2), T(3,3), T(4,4), T(5,5), T(6,6),
  247.          T(21,21))
  248.       T1(VALOF RESULTIS 1,
  249.          VALOF RESULTIS 2,
  250.          VALOF RESULTIS 3,
  251.          VALOF RESULTIS 4,
  252.          VALOF RESULTIS 5,
  253.          VALOF RESULTIS 6,
  254.          21)
  255.       T1(VALOF RESULTIS 1,
  256.          T(2,2),
  257.          VALOF RESULTIS 3,
  258.          T(4,4),
  259.          VALOF RESULTIS 5,
  260.          T(6,6),
  261.          21)
  262.      T1( 1, T(2,2), VALOF RESULTIS 3,
  263.          4, T(5,5), VALOF RESULTIS 6,
  264.          21)
  265.      T1(!V,V!0,V!200,!W,W!0,W!200, 2*1000+1200+2*10000+10200)
  266.      (T1+(X+X)/X-2)(1,1,1,1,1,1,6)
  267.      (!@T1)(1,2,3,4,5,6,21)
  268.  
  269.      TESTNO := 300  // TEST EXPRESSION OPERATORS
  270.  
  271.      T((2+3)+F+6,116)
  272.      T(F+2+3+6,116)
  273.      T(6+3+2+F, 116)
  274.      T(F-104, 1)
  275.      T((X+2)=(X+2)->99,98, 99)
  276.      T(F<F+1->21,22, 21)
  277.      T(F>F+1->31,32, 32)
  278.      T(F<=105->41,42, 41)
  279.      T(F>=105->51,52, 51)
  280.  
  281.     TESTNO := 400  // TEST REGISTER ALLOCATION ETC.
  282.  
  283.     X := 0
  284.     Y := 1
  285.     Z := 2
  286.     T(X, 0)
  287.     T(Y, 1)
  288.     T(Z, 2)
  289.     F,G,H := 101,102,103
  290.     A,B,C := 11,12,13
  291.     T(X+1,1)
  292.     T(F+1, 102)
  293.     T(A+1, 12)
  294.     T(!(@A*2/2+F-101),11)
  295.     A := @F
  296.     T(!A, 101)
  297.     B := @G
  298.     A := @B
  299.     T(!!A, 102)
  300.     W!0 := @W!1
  301.     W!1 := @H
  302.     T(Z*Y+(W!0)!0!0-2, 103)
  303.     T(Z*Y+W!1!0-2, 103)
  304.     T(T(123,123),T(123,123))
  305.  
  306.     WRITEF("*N%N TESTS COMPLETED, %N FAILURE(S)*N",
  307.             TESTCOUNT, FAILCOUNT)
  308. $)1
  309.  
  310.  
  311.